// package springtest.testjavaoplog;
//
// import java.sql.Timestamp;
// import java.util.ArrayList;
// import java.util.List;
//
// import org.bson.Document;
// import org.bson.types.BSONTimestamp;
// import org.springframework.beans.BeanUtils;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.beans.factory.annotation.Qualifier;
// import org.springframework.data.mongodb.core.MongoTemplate;
// import org.springframework.data.mongodb.core.query.Criteria;
// import org.springframework.data.mongodb.core.query.Query;
// import org.springframework.data.solr.core.SolrTemplate;
// import org.springframework.data.solr.core.query.SimpleQuery;
// import org.springframework.stereotype.Service;
//
// import com.alibaba.fastjson.JSON;
// import com.alibaba.fastjson.JSONObject;
// import com.mongodb.BasicDBObject;
// import com.mongodb.DB;
// import com.mongodb.DBCursor;
// import com.mongodb.DBObject;
// import com.mongodb.MongoClient;
// import com.mongodb.client.MongoCursor;
// import com.zeesec.nsm.common.base.BaseEntity;
//
// import springtest.pojo.BaseDio;
//
/// **
// * @author chenzhiqiang
// * @date 2018-03-02 15:03:45
// */
// @Service
// public class ReadOplog {
// @Autowired
// @Qualifier("oplogMongoTemplate")
// private MongoTemplate oplogMongoTemplate;
// @Autowired
// private MongoTemplate dataMongoTemplate;
// @Autowired
// private SolrTemplate solrTemplate;
// private static String solrDioPackageName = "springtest.pojo.";
// private static String solrDioEndName = "Dio";
//
// public void demo() throws Exception {
// MongoClient mongoClient = new MongoClient("localhost", 27111);
// MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "tets");
// DB db = mongoClient.getDB("local");
// BSONTimestamp ts = null;
// DBCursor cursor = db.getCollection("oplog.rs").find();
// while (true) {
// // String solrDioPackageName = "com.zeesec.pom.solr.dio.";
//
// while (cursor.hasNext()) {
// DBObject dbObject = cursor.next();
// // 得到的是数据库加集合名 中间.分开。
// String ns = (String) dbObject.get("ns");
//
// if (ns.trim() != null && ns.equals("tets.FILTER_RULE")) {
// String collectionName = ns.split("\\.")[1];
// // 确定数据是增加/修改/删除 i增加 u修改 d删除
// String change = (String) dbObject.get("op");
// String value = dbObject.get("o").toString();
// // JSONObject jsonObject = new JSONObject(value);
// JSONObject jsonObject = JSON.parseObject(value);
// // 得到全类名 "com.zeesec.nsm.common.domain.filter.FilterRule"
// // String className = (String) jsonObject.get("_class");
// String className = "com.zeesec.nsm.common.domain.filter.FilterRule";
// // String uuid = (String) jsonObject.get("uuid");
// // 得到对应的solrentity全类名
// if (className != null) {
//
// String[] split = className.split("\\.");
// String solr = split[split.length - 1];
// }
// String solrDioName = solrDioPackageName + "FilterRule" + solrDioEndName;
// Class<? extends BaseEntity> mongoentity = (Class<? extends BaseEntity>)
// Class.forName(className);
// Class<? extends BaseDio> solrDio = (Class<? extends BaseDio>)
// Class.forName(solrDioName);
// if (className != null) {
// JSONObject jsonObject2 = jsonObject.getJSONObject("_id");
// // 得到了变化的数据的id
// String mongoId = jsonObject2.get("$oid").toString();
// System.out.println(jsonObject2.get("$oid"));
// System.out.println(change);
// // 记录上次查询的位置
// ts = (BSONTimestamp) dbObject.get("ts");
// Criteria criteria = Criteria.where("id").is(jsonObject2.get("$oid"));
// Query query = new Query(criteria);
// List<? extends BaseEntity> resultList = mongoTemplate.find(query,
// mongoentity, "FILTER_RULE");
// List<BaseDio> dioList = new ArrayList<>();
// if (change.equals("d")) {
//
// }
//
// // mongoTemplate.fin
// if (resultList.size() != 0) {
// // 判断数据更改的类型
// if (change.equals("i")) {
// // 后续调用diotransform
// BaseEntity mongoEntity = resultList.get(0);
// System.out.println(mongoEntity.getId());
// BaseDio dio = solrDio.newInstance();
// BeanUtils.copyProperties(mongoEntity, dio);
// dio.set_id(mongoEntity.getId());
// System.out.println(dio.toString());
// // solrTemplate.saveBean("new_core", dio);
// // dioList.add(dio);
// inster(dio);
// }
// if (change.equals("u")) {
// // 后续调用diotransform
// BaseEntity mongoEntity = resultList.get(0);
// System.out.println(mongoEntity.getId());
// BaseDio dio = solrDio.newInstance();
// BeanUtils.copyProperties(mongoEntity, dio);
// dio.set_id(mongoEntity.getId());
// System.out.println(dio.toString());
// String uuid = dio.getUuid();
// update(collectionName, mongoId, uuid, dio);
// }
// }
// if (change.equals("d")) {
// // 删除时oplog日志只有一个 id
// // 所以只有通过id，所以solr中的id生成可能需要变化
// deleteSolr(collectionName, mongoId);
// }
// // solrTemplate.saveBean("new_core", dioList);
// // solrTemplate.commit("new_core");
// // Thread.sleep(5000);
// }
// }
// }
// // 游标查询从上次查询的位置开始查询
// cursor = db.getCollection("oplog.rs").find(new BasicDBObject("ts", new
// BasicDBObject("$gt", ts)));
// }
// }
//
// public void deleteSolr(String collectionName, String mongoId) {
// String idField = "id_" + collectionName.toLowerCase();
// org.springframework.data.solr.core.query.Criteria criteria = new
// org.springframework.data.solr.core.query.Criteria()
// .where(idField).is(mongoId);
// SimpleQuery simpleQuery = new SimpleQuery();
// simpleQuery.addCriteria(criteria);
// solrTemplate.delete("new_core", simpleQuery);
// solrTemplate.commit("new_core");
// }
//
// // Z
// public void delete(String collectionName, String mongoId, String uuid) {
// String idField = "id_" + collectionName.toLowerCase();
// org.springframework.data.solr.core.query.Criteria criteria = new
// org.springframework.data.solr.core.query.Criteria()
// .where("uuid").is(uuid).and(idField).is(mongoId);
// SimpleQuery simpleQuery = new SimpleQuery();
// simpleQuery.addCriteria(criteria);
// solrTemplate.delete("new_core", simpleQuery);
// solrTemplate.commit("new_core");
// }
//
// public void inster(BaseDio dio) {
// solrTemplate.saveBean("new_core", dio);
// solrTemplate.commit("new_core");
// }
//
// // solr没有跟新功能 只要数据id一样就是更新 就是先删除在更新
// // 所以先通过 id+uuid删除，在跟新
// public void update(String collectionName, String mongoId, String uuid,
// BaseDio dio) {
// delete(collectionName, mongoId, uuid);
// inster(dio);
// }
//
// public void demo2() throws Exception {
// MongoClient mongoClient = new MongoClient("localhost", 27111);
// MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "tets");
// DB db = mongoClient.getDB("local");
// Timestamp ts = null;
// Object object2 = null;
// // DBCursor cursor = db.getCollection("oplog.rs").find();
// MongoCursor<Document> cursor =
// oplogMongoTemplate.getCollection("oplog.rs").find().iterator();
//
// while (true) {
// // String solrDioPackageName = "com.zeesec.pom.solr.dio.";
// String solrDioPackageName = "springtest.pojo.";
// String solrDioEndName = "Dio";
// while (cursor.hasNext()) {
// Document dbObject = cursor.next();
// // 得到的是数据库加集合名 中间.分开。
// String ns = (String) dbObject.get("ns");
// if (ns.trim() != null && ns.equals("tets.test2")) {
// String collectionName = ns.split("\\.")[1];
// // 确定数据是增加/修改/删除 i增加 u修改 d删除
// String change = (String) dbObject.get("op");
// Document object = (Document) dbObject.get("o");
// // 得到了变化的数据的id
// String id = object.get("_id").toString();
// // 得到全类名 "com.zeesec.nsm.common.domain.filter.FilterRule"
// String className = object.get("_class").toString();
// String value = dbObject.get("o").toString();
//
// // 得到对应的solrentity全类名
// String[] split = className.split("\\.");
// String solr = split[split.length - 1];
// String solrDioName = solrDioPackageName + solr + solrDioEndName;
// Class<? extends BaseEntity> mongoentity = (Class<? extends BaseEntity>)
// Class.forName(className);
// Class<? extends BaseDio> solrDio = (Class<? extends BaseDio>)
// Class.forName(solrDioName);
// if (className != null) {
// // 记录本次查询的位置
// object2 = dbObject.get("ts");
// Criteria criteria = Criteria.where("id").is(id);
// Query query = new Query(criteria);
// List<? extends BaseEntity> resultList = dataMongoTemplate.find(query,
// mongoentity, "test2");
// List<BaseDio> dioList = new ArrayList<>();
// // mongoTemplate.fin
// if (resultList.size() != 0) {
// BaseEntity mongoEntity = resultList.get(0);
// System.out.println(mongoEntity.getId());
// BaseDio dio = solrDio.newInstance();
// BeanUtils.copyProperties(mongoEntity, dio);
// dio.set_id(mongoEntity.getId());
// System.out.println(dio.toString());
// // solrTemplate.saveBean("new_core", dio);
// dioList.add(dio);
// }
// solrTemplate.saveBeans("new_core", dioList);
// solrTemplate.commit("new_core");
// Thread.sleep(5000);
// }
// }
// }
// // 游标查询从上次查询的位置开始查询
// // cursor = db.getCollection("oplog.rs").find(new
// // BasicDBObject("ts", new BasicDBObject("$gt", ts)));
// cursor = oplogMongoTemplate.getCollection("oplog.rs")
// .find(new BasicDBObject("ts", new BasicDBObject("$gt", object2))).iterator();
// }
// }
// }
